<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03_Promise</title>
</head>
<body>
    <script>
     
       /** Promise
        *    1. 作用 : 用来消除异步 回调地狱的问题
        *   
        *    2. 使用 : 
        *      1) 创建 Promise 实例, 用这个实例去包裹异步代码
        *     const P = new Promise((resolve,reject) => {
        *        编写异步代码  成功调用resolve 失败调用reject
        * })
        * 
        *      2) 使用 Promise 实例,给我们提供的then方法拿数据和catch方法获取错误
        *  p.then(data=>{
        *   成功执行回调函数 data给resolve传的成功的数据
        * }).catch(e=>{
        *     失败
        * })
        * 
             
            需求 :发送ajax请求
            1秒之后,打印1,
            1打印出来后,2秒后,打印2
            2打印出来,3秒后,打印3
      **/
        
          //1. 封装延迟打印的函数
           let print = (data,delayTime)=>{
               return new Promise(resolve =>{
                   setTimeout(()=>{
                        resolve(data)
                   },delayTime * 1000)
               })
           }

          //2. 调用函数- 获取数据   Promise 的链式调用 规避回调地狱地狱问题
          //变量print(第一个参数输入内容,第二个参数是秒数)
          print(1,1).then(data1 =>{
              //1秒之后,打印1,
              console.log(data1);
              return print(2,2)
          }).then(data2=>{
              //1打印出来后,2秒后,打印2
              console.log(data2);
              return print(3,3)
          }).then(data3=>{
              //2打印出来,3秒后,打印3
              console.log(data3);
          })

     </script> 
</body>
</html>